<?php
namespace app\providers\middleware;
error_reporting(E_ERROR | E_WARNING | E_PARSE);
/**
* token验证中间件
* Class AuthTokenMiddleware
* @package app\http\middleware
*/
class ChenkRequest 
{
	//自执行中间件方法
   	public function handle($request, \Closure $next){
        
        //检测是否有木马文件上传
        if( $files = $request->file() ){
            foreach($files as $key=>$file){
                if( strstr(strtolower( $file->getOriginalName() ),".php") ){
                    return \Api::ReError("监听到木马文件，禁止上传！",-2);
                }
            }
        }
        
		//检测所有请求参数是否有sql注入的风险
		if( $this->is_exist_sql_inject() ){
			return \Api::ReError("监听到存在SQL注入的风险</br>请调整后重新操作！",-2);
		}
		
		//检测是否村在特殊符号
		//if( $this->is_exist_special_symbols() ){
			//return \Api::ReError("监听到存在特殊符号的请求</br>请调整后重新操作！",-2);
		//}

		return $next($request);
    }
	
	//<!--  = 检测是否存在sql注入 =  -->
	private function is_exist_sql_inject(){
		$pattern='/\binsert\s|\bselect\s|\bselect\*\s|\bselect\*from\s|\bselect\*from\(|\bupdate\s|\bdelete\s|\bcreate\s|\balter\s|\bdrop\s|(\bexec|\bexecute)[\s\(]|\bsp_|\bxp_|\sinto\s/';
		$param =  strtolower(  json_encode($_REQUEST) );
		return preg_match($pattern,$param) ? true : false;
    }
	
	//<!--  = 检测是否村在特殊符号 =  -->
	private function is_exist_special_symbols(){
		$pregs = '/\*|\#/';
		$param =  strtolower(  json_encode($_REQUEST) );
		return preg_match($pregs,$param) ? true : false;
    }
	
}